iT邦幫忙

2024 iThome 鐵人賽

DAY 26
0
Modern Web

Backend Developer的學習Roadmap系列 第 26

Day 26 Mitigation Strategies - Backpressure

  • 分享至 

  • xImage
  •  

今天要繼續來介紹對server穩定性會有影響的Backpressure。

Backpressure(背壓)

單純看中文翻譯會不知道這是在做什麼的

https://ithelp.ithome.com.tw/upload/images/20241010/201297022BxdmdUVe4.png
今天下游系統無法處理需求,導致上游系統阻塞了。
假設今天producer產了每秒10筆給pipeline,而pipeline只能給consumer每秒5筆,這樣多出來的流量無法被處理,這時候我們可以有幾個選項。
1.就是把producer的生產速度下降,這樣就不會將過多的生產資源跑到下游了。
2.將pipeline加上buffer,讓多餘的流量儲存起來。
3.直接把流量丟掉,因為消費者也無法處理這麼多的流量。
4.讓消費者來pull,因為消費者知道自己需要多少的流量,就不會發生生產者產生過多的問題了。(插題分享一下Scrum、Kanban也是一種pull model,透過消費者來拉,更能讓資源有效的利用)

這種控制流量的方式就叫做背壓。

Callstack blocking

當一個執行緒在執行任務時,如果pool滿了,它會在提交任務的時候被擋住,等到池子有空位了才會繼續往下執行,整條Callstack會卡在同一個地方,因為producer需要等到任務被成功提交了才能繼續執行。
如果這個處理過程不是在同一個執行緒裡執行,像是任務在不同的執行緒中執行,又或者是跨越了多個微服務的系統,要實現這種阻塞就變得十分困難了QQ

這種阻塞方式又稱為隱式背壓。

pull model

這種方式是顯示背壓,消費者知道自己需要多少的流量,當它可以處理時它就向producer要資源,我們平常用的api就是一種範例,它是由consumer向server發出request,而不是server主動給consumer資源。

總結

我們不能隨意無限地加大buffer,這樣可能會造成處理時間無限增加,也會增加硬體的消耗,我們應該優先考慮pull的方式,這樣比較好XD 需求=供給,就不會浪費了~

reference

https://lotabout.me/2020/Back-Pressure/


上一篇
Day 25 Mitigation Strategies - Throttling and Debouncing
下一篇
Day 27 Mitigation Strategies - Circuit Breaker
系列文
Backend Developer的學習Roadmap30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言